package com.julius.design.suanfa.tree;

/**
 * @author julius
 * @date 2021-10-27 下午 2:11
 * <p>
 *      请实现一个函数，用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样，那么它是对称的。
 *      https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof/
 * </p>
 */
public class SymmetricTree {



    public boolean isSymmetric(TreeNode root) {
        //左子树的右子树 == 右子树的左子树
        //左子树的左子树 == 右子树的右子树
        //左子树的根     == 右子树的根
        if(root == null){
            return true;
        }
        return isSame(root.left,root.right);
    }

    /**
     * 判断左右子树是否相等
     * @param left
     * @param right
     * @return
     */
    public boolean isSame(TreeNode left,TreeNode right){
        if(left == null && right == null){
            return true;
        }
        if(left == null || right == null){
            return false;
        }
        if(left.val != right.val){
            return false;
        }
        return isSame(left.left,right.right) && isSame(left.right,right.left);
    }
}
